Skip to main content

10-dars. Dinamik xotira bilan ishlash

Darsning Maqsadlari:

  • Dinamik xotira tushunchasini o'rganish.
  • malloc, calloc, realloc, va free funksiyalarini to'liq tushunish.
  • Ularning e'lon qilinishi va ishlatish usullarini o'rganish.

Dinamik Xotira

Dasturlashda xotira bilan ishlash muhim ahamiyatga ega. Dinamik xotira — bu dastur bajarilishi davomida kerak bo'lganda xotira ajratish imkoniyatini ta'minlaydi. Buning yordamida biz dasturimizda o'zgaruvchilar sonini dinamik ravishda boshqarishimiz mumkin.


Malloc

malloc (memory allocation) — bu funksiyadan foydalanib, kerakli xotira miqdorini ajratamiz. Buning sintaksisi quyidagicha:

void* malloc(size_t size);
  • size — ajratilishi kerak bo'lgan xotira hajmi (baytlarda).
  • malloc funksiyasi ajratilgan xotira joyining manzilini qaytaradi.

Misol

int *arr;
arr = (int*)malloc(5 * sizeof(int)); // 5 ta int uchun xotira ajratamiz

malloc funksiyasi ajratilgan xotira joyini to'ldirmaydi, ya'ni unda eski ma'lumotlar bo'lishi mumkin. Shuning uchun, uni ishlatishdan oldin, xotirani tozalash kerak.


Calloc

calloc — bu funksiyadan foydalanib, xotira ajratish va uni nolga to'ldirish mumkin. Buning sintaksisi quyidagicha:

void* calloc(size_t num, size_t size);
  • num — ajratiladigan elementlar soni.
  • size — har bir elementning o'lchami (baytlarda).

Misol

int *arr;
arr = (int*)calloc(5, sizeof(int)); // 5 ta int uchun xotira ajratamiz va nolga to'ldiramiz

calloc har bir elementni nolga to'ldiradi, shuning uchun malloc dan farqli o'laroq, eski ma'lumotlar bo'lmaydi.


Realloc

realloc — mavjud xotira joyini o'zgartirish uchun ishlatiladi. Bu funksiyaning sintaksisi quyidagicha:

void* realloc(void* ptr, size_t size);
  • ptr — o'zgartirilishi kerak bo'lgan xotira manzili.
  • size — yangi xotira hajmi (baytlarda).

Misol

int *arr;
arr = (int*)malloc(5 * sizeof(int)); // Dastlab 5 ta int ajratamiz
arr = (int*)realloc(arr, 10 * sizeof(int)); // 10 ta int ga o'zgartiramiz

realloc funksiyasi xotira joyini o'zgartiradi va agar kerak bo'lsa, yangi joyda xotira ajratadi. Eski joyni avtomatik ravishda tozalaydi, shuning uchun foydalanuvchi buni alohida qilishiga hojat yo'q.


Free

free — bu funksiyadan foydalanib, ajratilgan xotira joyini bo'shatamiz. Bu juda muhim, chunki bo'shatilmagan xotira oqishlariga olib kelishi mumkin. Sintaksisi:

void free(void* ptr);

Misol

free(arr); // Ajratilgan xotira joyini bo'shatamiz

Har doim free funksiyasidan foydalanishni unutmang, aks holda dasturda xotira oqishlari bo'lishi mumkin.


Xulosa

Dinamik xotira dasturlashda juda muhim rol o'ynaydi. malloc, calloc, realloc, va free funksiyalari orqali biz xotira bilan qanday ishlashimizni bilib oldik. Ushbu funksiyalarni to'g'ri va samarali ishlatish dasturimizning barqarorligini ta'minlaydi.


Savollar:

  1. malloc va calloc o'rtasidagi farq nima?
  2. Qanday hollarda realloc funksiyasidan foydalanish kerak?
  3. Xotira oqishlarini oldini olish uchun qanday choralar ko'rishimiz mumkin?
  4. free funksiyasi nima uchun zarur?